/**
 * Classe contendo informações que são necessarias para um documento
 */
package br.inf.acesso.regrasdenegocios.geral;

import java.util.ArrayList;
import javax.swing.table.DefaultTableModel;

/**
 * @author Douglas Giordano
 * @since 28/04/2013
 */
public class Documento {

    private int numero;
    private double valor;
    private String origem;
    private int codigo;
    private ArrayList<Item> itens;

    /**
     * Novo Documento
     *
     * @param numero
     * @param valor
     * @param codigo
     */
    public Documento(int numero, double valor, int codigo) {
        this.numero = numero;
        this.valor = valor;
        this.codigo = codigo;
    }

    /**
     * Novo Documento
     *
     * @param numero
     * @param valor
     * @param origem
     */
    public Documento(int numero, double valor, String origem) {
        this.numero = numero;
        this.valor = valor;
        this.origem = origem;
    }

    /**
     * Novo Documento
     *
     * @param numero
     * @param valor
     * @param origem
     * @param codigo
     */
    public Documento(int numero, double valor, String origem, int codigo) {
        this.numero = numero;
        this.valor = valor;
        this.origem = origem;
        this.codigo = codigo;
    }

    public int getNumero() {
        return numero;
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }

    public double getValor() {
        return valor;
    }

    public void setValor(double valor) {
        this.valor = valor;
    }

    public String getOrigem() {
        return origem;
    }

    public void setOrigem(String origem) {
        this.origem = origem;
    }

    public int getCodigo() {
        return codigo;
    }

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    public ArrayList<Item> getItens() {
        return itens;
    }

    public void setItens(ArrayList<Item> itens) {
        this.itens = itens;
    }

    /**
     * Compara dois arrays recebidos por parametro, o todos os documentos que
     * não forem encontrados no segundo array de documentos seram adicionados a
     * uma lista de documentos ausentes e no final do processo e retornado todos
     * os documentos ausentes.
     *
     * @param documentosEmp
     * @param documentosTrib
     * @return documentos ausentes no questor fiscal
     */
    public static ArrayList<Documento> comparaDocumentos(ArrayList<Documento> documentosEmp, ArrayList<Documento> documentosTrib) {
        ArrayList<Documento> documentosFaltando = new ArrayList<Documento>();
        boolean existe = false;
        for (int i = 0; i < documentosEmp.size(); i++) {
            existe = false;
            for (int j = 0; j < documentosTrib.size(); j++) {
                if (documentosEmp.get(i).getNumero() == documentosTrib.get(j).getNumero()) {
                    existe = true;
                    break;
                }
            }
            if (existe == false) {
                documentosFaltando.add(documentosEmp.get(i));
            }
        }
        return documentosFaltando;
    }

    /**
     * Método lista todos os documentos em uma tabela, mostrando todas as
     * informações na seguinte ordem de colunas: 
     * -Numero do documento 
     * -Valor do documento 
     * -Origem do documento
     *
     * @param listaDocumentos
     * @param modelo
     */
    public static void listaDocumentos(ArrayList<Documento> listaDocumentos, DefaultTableModel modelo) {
        for (int i = 0; i < listaDocumentos.size(); i++) {
            String[] documento = new String[3];
            documento[0] = listaDocumentos.get(i).getNumero() + "";
            documento[1] = listaDocumentos.get(i).getValor() + " R$";
            documento[2] = listaDocumentos.get(i).getOrigem();
            modelo.addRow(documento);
        }
    }

    /**
     * Método lista todos os documentos em uma tabela, mostrando todas as
     * informações na seguinte ordem de colunas: 
     * -Código sequencial do documento
     * -Numero do documento 
     * -Valor do documento 
     * -Origem do documento
     *
     * @param listaDocumentos
     * @param modelo
     */
    public static void listaDocumentosMd2(ArrayList<Documento> listaDocumentos, DefaultTableModel modelo) {
        for (int i = 0; i < listaDocumentos.size(); i++) {
            String[] documento = new String[4];
            documento[0] = listaDocumentos.get(i).getCodigo() + "";
            documento[1] = listaDocumentos.get(i).getNumero() + "";
            documento[2] = listaDocumentos.get(i).getValor() + " R$";
            documento[3] = listaDocumentos.get(i).getOrigem();
            modelo.addRow(documento);
        }
    }
}
